package pers.zb.task.order;

import java.text.MessageFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import pers.zb.bean.order.OrderInfo;
import pers.zb.common.enums.order.OrderSource;
import pers.zb.common.util.HttpClientUtil;

/**
 * 【作用】：模拟订单同步。
  
 * 【流程】： 1、启动该项目，task会自动运行 
            2、请求项目zb-web提供的订单同步接口 
            3、zb-web项目发送activemq消息给zb-activemq消费者
            4、由zb-activemq消费者来处理相关业务(也就是实现订单入库操作)
            5、订单同步成功。
            
 * 【说明】：zb-web项目不会去处理具体的订单入库，而是通过借助消息队列实现订单异步处理，在高并发、大数据量同步的时候，不会造成系统堵塞，消息队列可以提高用户端的响应速度，提高系统服务效率，实现数据异步处理。
 * 
 * 操作人: zhoubang 日期：2016年10月19日 上午11:42:09
 *
 */
@Component("orderSyncTask")
@Lazy(false)
public class OrderSyncTask {
    
    private Logger logger = LoggerFactory.getLogger(getClass());
    
    @Value("#{configProperties['web_order_sync_url']}")
    private String ORDER_SYNC_URL;
    
    /**
     * 每10秒钟同步一个订单
     * 
     * 操作人: zhoubang 日期：2016年10月19日 上午11:50:50
     * 
     */
    @Scheduled(cron = "0/10 * * * * ?")
    public void emailMsgTasks() {
        String result = null;
        try {
            
            //获取一个订单
            Map<String, Object> parameterMap = initOrder();
            result = HttpClientUtil.post(ORDER_SYNC_URL, parameterMap);
        } catch (Exception e) {
            //e.printStackTrace();
        }
        logger.debug(MessageFormat.format("【任务调度，订单同步返回结果】：{0}", result));
    }
    
    /**
     * 初始化一个订单数据
     * 
     * 操作人: zhoubang 日期：2016年10月19日 下午12:10:10
     *
     */
    public static Map<String, Object> initOrder(){
        Map<String, Object> parameterMap = new HashMap<String, Object>();
        parameterMap.put("orderNo", Long.toString(System.currentTimeMillis()));
        parameterMap.put("goodName", "冬季大衣.");
        parameterMap.put("orderSource", OrderSource.BACK_SYSTEM);
        parameterMap.put("totalFee", 1000);
        return parameterMap;
    }
}